Python学习之Flask全局异常处理流程

您所在的位置:网站首页 python 异常处理方法 Python学习之Flask全局异常处理流程

Python学习之Flask全局异常处理流程

2023-06-29 00:25| 来源: 网络整理| 查看: 265

文章目录 前言一、Flask是什么?二、Flask异常处理的整体流程1.异常注册2.异常触发3.异常处理 三、客户端异常和服务端异常1.客户端异常 2.服务器异常1.错误日志记录2.通用的错误处理 总结

前言

关于客户端/服务端异常,先看段样例代码:

from flask import * from paddlenlp import Taskflow from werkzeug.exceptions import HTTPException app = Flask(__name__) app.config['JSON_AS_ASCII'] = False @app.errorhandler(Exception) def handle_500_exception(e): # pass through HTTP errors if isinstance(e, HTTPException): return e # now you're handling non-HTTP exceptions only return render_template("500_generic.html", e=e), 500 @app.errorhandler(HTTPException) def handle_exception(e): response = e.get_response() response.data = json.dumps({ "code": e.code, "name": e.name, "description": e.description, }) response.content_type = "application/json" return response class RequestParamException(HTTPException): code = 400 def handle_param_exception(e): response = e.get_response() response.data = json.dumps({ "code": e.code, "name": "子类:RequestParamException 处理的异常。", "description": e.description, }) response.content_type = "application/json" return response @app.route('/add_user', methods=['POST']) def add_documents(): data = request.get_json() user = data['user'] if user is None or len(user) "message": "Page not found"}), 404 @app.errorhandler(Exception) def handle_generic_error(error): app.logger.error("An error occurred: %s", error) return jsonify({"message": "Internal Server Error"}), 500 if __name__ == '__main__': app.run()

异常处理函数中,handle_not_found_error处理404错误并返回自定义的JSON响应。而handle_generic_error则是通用的异常处理函数,在发生任何未捕获的异常时都会调用,它记录了错误日志并返回适当的错误响应。

三、客户端异常和服务端异常

客户端异常是由于客户端错误导致的异常,例如无效的请求、身份验证失败等。服务器异常则是由于服务器错误导致的异常,如应用程序崩溃、数据库连接问题等。

1.客户端异常

客户端异常是由客户端的无效请求或操作引起的。对于客户端异常,应注意以下事项:

适当的HTTP状态码:返回正确的HTTP状态码来表示客户端错误。常见的状态码包括400(错误请求)、401(未授权)、403(禁止访问)等。

from flask import Flask, jsonify app = Flask(__name__) @app.route('/login', methods=['POST']) def login(): username = request.form.get('username') password = request.form.get('password') if not username or not password: # 返回400错误状态码和错误信息 return jsonify({"error": "Invalid username or password"}), 400 # 进行身份验证逻辑... if __name__ == '__main__': app.run()

在上述代码中,如果缺少用户名或密码,服务器将返回400错误状态码和错误信息。

错误处理装饰器:可以使用装饰器捕获客户端异常,并返回适当的响应。例如,使用@app.errorhandler(400)装饰器来捕获400错误。

from flask import Flask, jsonify app = Flask(_name_) @app.errorhandler(400) def handle_bad_request_error(error): return jsonify({"error": "Bad Request"}), 400 @app.route('/login', methods=['POST']) def login(): username = request.form.get('username') password = request.form.get('password') if not username or not password: # 返回400错误状态码,装饰器的处理函数会被触发 abort(400) # 进行身份验证逻辑... if __name__ == '__main__': app.run()

如果缺少用户名或密码,在login函数中使用abort(400)触发400错误,然后由handle_bad_request_error处理该错误并返回自定义的错误响应。

2.服务器异常

服务器异常是由于服务器端错误导致的异常。对于服务器异常,需要注意以下事项:

1.错误日志记录

在发生服务器异常时,及时记录错误信息到日志文件中,以便进行故障排查和问题修复。

import logging from flask import Flask app = Flask(__name__) @app.route('/') def index(): try: # 一些潜在的引发异常的操作 raise ValueError("Something went wrong") except Exception as e app.logger.error("An error occurred: %s", str(e)) # 返回通用的服务器错误响应 return "Internal Server Error", 500 if __name__ == '__main app.run()

当发生异常app.logger.error将错误信息记录到应用程序的日志中。

2.通用的错误处理

捕获和处理未处理的服务器异常,并返回适当的错误响应给客户端。

from flask import Flask, jsonify app = Flask(__name__) @app.errorhandler(Exception) def handle_generic_error(error): app.logger.error("An error occurred: %s", error) # 返回自定义的服务器错误响应 return jsonify({"error": "Internal Server Error"}), 500 @app.route('/') def index(): try: # 一些潜在的引发异常的操作 raise ValueError("Something went wrong") except Exception as: # 触发异常后由异常处理函数进行处理 return handle_generic_error(e) if __name__ == '__main__': app.run()

当发生异常时,调用handle_generic_error进行处理并返回自定义的服务器错误响应。例模式可将处理逻辑从路由函数中分离出来。

总结

1、注册处理函数,将特定类型的异常与相应的处理函数绑定。 2、在应用程序执行过程中,如果发生异常,Flask会寻找匹配的异常处理函数。 3、匹配到异常处理函数后,控制权转移到异常处理函数,并执行相4、应的处理逻辑。 5、异常处理函数可以根据需要进行自定义的异常信息返回、日志记录或其他操作。 6、处理完异常后,Flask会返回相应的错误响应给客户端。

参考文献:Flask开发技巧之异常处理 https://www.cnblogs.com/luyuze95/p/12937704.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3